package queens.forms;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.Globals;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.Resources;

import queens.beans.BusquedaClientesBean;
import queens.beans.ClienteBean;
import queens.util.Constantes;

@SuppressWarnings("serial")
public class AltaClientesForm extends QueensForm {
	
	private ClienteBean clienteBean = new ClienteBean();
	private String[] claveCliente;
	
	private BusquedaClientesBean busquedaClientesBean = new BusquedaClientesBean();

	public ClienteBean getClienteBean() {
		return clienteBean;
	}

	public void setClienteBean(ClienteBean clienteBean) {
		this.clienteBean = clienteBean;
	}
	
	public String[] getClaveCliente() {
		return claveCliente;
	}

	public void setClaveCliente(String[] claveCliente) {
		this.claveCliente = claveCliente;
	}

	public BusquedaClientesBean getBusquedaClientesBean() {
		return busquedaClientesBean;
	}

	public void setBusquedaClientesBean(BusquedaClientesBean busquedaClientesBean) {
		this.busquedaClientesBean = busquedaClientesBean;
	}

	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		if(Resources.getMessage(request,"guardar").equals(this.accion)){
			/*TODO: activar validador DNI
			if((!esDniValido(this.clienteBean.getDni())) && (!"".equals(this.clienteBean.getDni()))){
				errors.add("errorDni",        new ActionError("dni.no.valido"));
				errors.add("clienteBean.dni", new ActionError(""));
			}
			*/
			errors.add(super.validate(mapping,request));
		}else if (Resources.getMessage(request,"editar").equals(this.accion)){
			if(this.accionSistema.equals(Constantes.ACCION_SISTEMA_EDITAR_CLIENTE)){
				errors.add(super.validate(mapping,request));
			}
		}
		
		if(faltaCampoObligatorio(errors)){
			errors.add("errorGenerico", new ActionError("falta.obligatorio"));
		}
		
		request.getSession().setAttribute(Globals.ERROR_KEY,errors);
		return null;
	}
	
	@SuppressWarnings("unused")
	private boolean esDniValido(String nif){
		 
		//si es NIE, eliminar la x inicial para tratarlo como nif
		if (nif.startsWith("x")||nif.startsWith("X")){
			nif = nif.substring(1);
		}
		 
		Pattern nifPattern = Pattern.compile("(\\d{1,8})([TRWAGMYFPDXBNJZSQVHLCKEtrwagmyfpdxbnjzsqvhlcke])");
		Matcher m = nifPattern.matcher(nif);
		if(m.matches()){
			String letra = m.group(2);
		    //Extraer letra del NIF
		    String letras = "TRWAGMYFPDXBNJZSQVHLCKE";
		    int dni = Integer.parseInt(m.group(1));
		    dni = dni % 23;
		    String reference = letras.substring(dni,dni+1);
		 		    	
		    if (reference.equalsIgnoreCase(letra)){
		    	return true;
		    }else{
		    	return false;
		    }
		}
		else{
			return false;
		}
		    	
	}
}